package com.example.springboot;

/**
 * @SpringBootApplication
 * 相当与
 *    @EnableAutoConfiguration  导入自动配置类
 *    @SpringBootConfiguration
 *    @ComponentScan
 *
 */

/**
 * @EnableAutoConfiguration 相当于👇 导入自动配置类
 *       @AutoConfigurationPackage 相当于👇
 *           @Import({Registrar.class}) 导入一系列组件
 *               /利用Registrar给容器中导入一系列组件
 *               //将指定的一个包下的所有组件导入进来？主配置类 所在包下。
 *        @Import({AutoConfigurationImportSelector.class})
 *           AutoConfigurationImportSelector.class
 *                 批量
 *           1、利用getAutoConfigurationEntry(annotationMetadata);给容器中批量导入一些组件
 *           2、调用List<String> configurations =
 *              getCandidateConfigurations(annotationMetadata, attributes)
 *              获取到所有需要导入到容器中的配置类
 *           3、利用工厂加载 Map<String, List<String>>
 *                loadSpringFactories(@Nullable ClassLoader classLoader)；
 *                得到所有的组件
 *         4、从 META-INF/spring.factories 位置来加载一个文件。
 *           默认扫描我们当前系统里面导入的包下所有META-INF/spring.factories位置的文件
 *           spring-boot-autoconfigure-2.5.5.jar包里面也有 META-INF/spring.factories
 *           # Auto Configure下面
 *           org.springframework.boot.autoconfigure.EnableAutoConfiguration
 *           里面写死了一百多个刚开始的自动配置  已启动就启动
 *           虽然我们127个场景的所有自动配置启动的时候默认全部加载。xxxxAutoConfiguration
 *           但是最后按照条件装配规则（@ConditionalOnXxx），最终会按需配置。
 *           根据条件装配  可以按需配置
 *
 *
 *
 *
 *
 */

/**
 *@SpringBootConfiguration 相当于👇
 * @Target({ElementType.TYPE})
 * @Retention(RetentionPolicy.RUNTIME)
 * @Documented
 * @Configuration//表示这是一个配置类
 * @Indexed
 *
 */

/**
 *@ComponentScan
 *
 */
public class 主配置类的详解 {
}
